package network

import (
	"fmt"
	"time"

	"github.com/gin-gonic/gin"
)

// APIServer 定义API服务器
func APIServer() {
	fmt.Println("=== 网络编程演示 ===")

	// 创建gin路由器
	router := gin.Default()

	// 简单路由
	router.GET("/", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"message": "欢迎访问Go语言基础示例API",
			"time":    time.Now().Format("2006-01-02 15:04:05"),
		})
	})

	// 带参数的路由
	router.GET("/hello/:name", func(c *gin.Context) {
		name := c.Param("name")
		c.JSON(200, gin.H{
			"message": fmt.Sprintf("你好, %s!", name),
		})
	})

	// 查询参数路由
	router.GET("/add", func(c *gin.Context) {
		a := c.Query("a")
		b := c.Query("b")
		c.JSON(200, gin.H{
			"a":       a,
			"b":       b,
			"message": fmt.Sprintf("查询参数a=%s, b=%s", a, b),
		})
	})

	// POST请求路由
	router.POST("/submit", func(c *gin.Context) {
		var data struct {
			Name  string `json:"name"`
			Email string `json:"email"`
		}

		if err := c.BindJSON(&data); err != nil {
			c.JSON(400, gin.H{"error": err.Error()})
			return
		}

		c.JSON(200, gin.H{
			"message": fmt.Sprintf("收到提交: 姓名=%s, 邮箱=%s", data.Name, data.Email),
		})
	})

	fmt.Println("HTTP服务器已配置完成，监听端口: 8080")
	fmt.Println("可用路由:")
	fmt.Println("  GET    /             - 首页")
	fmt.Println("  GET    /hello/:name  - 问候接口")
	fmt.Println("  GET    /add?a=x&b=y  - 查询参数接口")
	fmt.Println("  POST   /submit       - 提交数据接口")

	// 启动服务器（非阻塞模式）
	go func() {
		if err := router.Run(":8080"); err != nil {
			fmt.Printf("服务器启动失败: %v\n", err)
		}
	}()

	// 等待服务器启动
	time.Sleep(1 * time.Second)
	fmt.Println("服务器已启动，你可以通过浏览器或curl访问 http://localhost:8080")
}

// DemoHttpClient 演示HTTP客户端
func DemoHttpClient() {
	fmt.Println("\n--- HTTP客户端演示 ---")
	fmt.Println("注意: 完整的HTTP客户端示例需要使用net/http包")
	fmt.Println("你可以使用以下命令测试API:")
	fmt.Println("  curl http://localhost:8080")
	fmt.Println("  curl http://localhost:8080/hello/Go")
	fmt.Println("  curl http://localhost:8080/add?a=1&b=2")
	fmt.Println("  curl -X POST -H 'Content-Type: application/json' -d '{\"name\":\"测试\",\"email\":\"test@example.com\"}' http://localhost:8080/submit")
}
